package org.springframework.howelly.validators;

import java.math.BigDecimal;
import java.math.RoundingMode;

import org.springframework.binding.message.MessageBuilder;
import org.springframework.binding.message.MessageContext;
import org.springframework.howelly.model.Categoria;
import org.springframework.howelly.model.Obra;

public class ObraValidator {

    public static void validateNewObra(MessageContext context, Obra obra) {
	if (obra.getName() == "") {
	    context.addMessage(new MessageBuilder().error().source("name").defaultText(
		    "Por favor, seleccione un nombre para la obra").build());
	}
    }

    public static boolean validateCategorias(Obra obra, MessageContext context) {
	double total = 0;
	for (Categoria categoria : obra.getCategorias()) {
	    total += categoria.getPresupuesto().doubleValue();
	}
	if (total > (obra.getPrice().doubleValue())) {
	    BigDecimal excedente = new BigDecimal(total - obra.getPrice().doubleValue()).setScale(2,
		    RoundingMode.HALF_DOWN);
	    context.addMessage(new MessageBuilder().info().source("categorias").defaultText(
		    "El total actual de las categorias es de "
			    + new BigDecimal(total).setScale(2, RoundingMode.HALF_DOWN)).build());
	    context.addMessage(new MessageBuilder().info().source("categorias").defaultText(
		    "El total debe ser igual al precio de Licitacion").build());
	    context
		    .addMessage(new MessageBuilder().info().source("categorias").defaultText(
			    "El excedente actual es de $: " + excedente.setScale(2, RoundingMode.HALF_DOWN) + " pesos")
			    .build());
	    return true;
	}
	if (total < (obra.getPrice().doubleValue())) {
	    BigDecimal faltante = new BigDecimal(obra.getPrice().doubleValue() - total).setScale(2,
		    RoundingMode.HALF_DOWN);
	    context.addMessage(new MessageBuilder().info().source("categorias").defaultText(
		    "El total actual de las categorias es de "
			    + new BigDecimal(total).setScale(2, RoundingMode.HALF_DOWN) + " pesos").build());
	    context.addMessage(new MessageBuilder().info().source("categorias").defaultText(
		    "El total debe ser igual al precio de Licitacion").build());
	    context.addMessage(new MessageBuilder().info().source("categorias").defaultText(
		    "Faltan asignar $: " + faltante.setScale(2, RoundingMode.HALF_DOWN) + " pesos").build());

	    return true;
	}
	return false;
    }
}
